package com.yuw.producerandconsumer;

public class Producer extends Thread {

	// 属性
	// 仓库
	private WarehouseStack whStack;

	// 多线程终止采用外部传入停止参数
	private boolean isStooped;

	// 行为

	@Override
	public void run() {
		int num = 0;
		// 生产者负责生产产品
		while (true) {
			synchronized (whStack) {
				// 判断仓库栈是否满，如果满了则等待消费者消费产品
				// 栈顶位置size大于栈容量，说明栈满
				if (whStack.getSize() == whStack.getCapacity()) {
					try {
						System.out.println("仓库满，生产者进入仓库的等待队列，等待消费者消费之后将其唤醒");
						// 让当前生产者等待消费者消费
						whStack.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

				// 生产一个产品
				Product pro = new Product("" + num++, Math.random() * 10 + 90);

				// 将产品放入栈中
				whStack.push(pro);
				// 输出信息
				System.out.println("生产者生产产品：" + pro.printInfo());

				// 生产了产品之后，通知消费者可以消费了

				whStack.notifyAll();
			}
			// 休眠500ms
			try {
				Thread.sleep(750);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public Producer(WarehouseStack whStack) {
		super();
		this.whStack = whStack;
	}

}
